package com.wlr.study.leetcode;

import java.util.Arrays;

/**
 * 移动零
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 * <p>
 * 请注意 ，必须在不复制数组的情况下原地对数组进行操作。
 */
public class LeetCode283 {
    public void moveZeroes(int[] nums) {
        if (nums.length <= 1) {
            return;
        }
        for (int j = 0; j < nums.length; j++) {
            for (int i = j + 1; i < nums.length; i++) {
                if (nums[i] != 0 && nums[j] == 0) {
                    int temp = nums[i];
                    nums[j] = temp;
                    nums[i] = 0;
                }
            }
        }

    }

    /**
     * 双指针法
     *
     * @param nums 数组
     */
    public void moveZeroes1(int[] nums) {
        if (nums == null) {
            return;
        }
        int j = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0) {
                nums[j++] = nums[i];
            }
        }
        for (int i = j; i < nums.length; ++i) {
            nums[i] = 0;
        }
    }

    public static void main(String[] args) {
        LeetCode283 leetCode283 = new LeetCode283();
        int[] nums = new int[]{1, 0, 1};
        leetCode283.moveZeroes1(nums);
        System.out.println(Arrays.toString(nums));
    }
}
